package com.sjd.mall.service.goods;

import com.alibaba.fastjson.JSONObject;
import com.sjd.common.core.domain.AjaxResult;
import com.sjd.mall.domain.dto.goods.*;
import org.apache.commons.lang3.tuple.MutablePair;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author : Mr.s
 * @version : 1.0
 * @description : 商品service
 * @date : 2022-01-11 09:44
 */
public interface GoodsService {

    /**
     * 查询商品 管理平台
     *
     * @param requestDTO
     * @return return
     */
    List<SjdWebSiteGoodsQueryResponseDTO> queryGoodsWebSite(SjdWebSiteGoodsQueryRequestDTO requestDTO);

    /**
     * 查询商品 根据id查询接口
     *
     * @param goodsId goodsId
     * @return return
     */
    AjaxResult queryGoodsWebSiteByGoodsId(Long goodsId);

    /**
     * 商品增加
     *
     * @param requestDTO requestDTO
     * @return return
     */
    AjaxResult addGoods(SjdGoodsAddRequestDTO requestDTO);

    /**
     * 更新商品
     *
     * @param requestDTO requestDTO
     * @return return
     */
    AjaxResult updateGoods(SjdGoodsUpdateRequestDTO requestDTO);

    /**
     * 上下线商品
     *
     * @param id       id
     * @param isOnline isOnline
     * @return return
     */
    AjaxResult onlineOfflineGoods(Long id, boolean isOnline);

    /**
     * 删除商品
     *
     * @param goodsId goodsId
     * @return return
     */
    AjaxResult deleteGoods(Long goodsId);

    /**
     * 获取在线商品列表 调取用户模块实现会员价功能 小程序
     *
     * @param requestDTO requestDTO
     * @return return
     */
    List<SjdGetGoodsListResponseDTO> getGoodsList(SjdGetGoodsListRequestDTO requestDTO);

    /**
     * 获取banner redis实现
     *
     * @return return
     */
    List<JSONObject> getBanner();

    /**
     * 获取banner redis实现
     *
     * @param ids
     * @return return
     */
    AjaxResult setBanner(List<Long> ids);

    /**
     * 获取商品信息 调取用户模块 实现会员价功能
     *
     * @param id id
     * @return return
     */
    Object getGoodsInfo(Long id);

    /**
     * 减少库存
     *
     * @param goodsId goodsId
     * @param count   count
     * @return return
     */
    MutablePair<Boolean, String> decreaseStorage(Long goodsId, BigDecimal count);

    /**
     * 增加库存
     *
     * @param goodsId goodsId
     * @param count   count
     * @return return
     */
    MutablePair<Boolean, String> increaseStorage(Long goodsId, BigDecimal count);

    /**
     * 获取会会员价格
     *
     * @param memberId
     * @param goodsPrice
     * @return
     */
    BigDecimal getMembershipPrice(Long memberId, BigDecimal goodsPrice);

    /**
     * 添加商品到banner
     *
     * @param goodsId goodsId
     * @return return
     */
    AjaxResult addBanner(Long goodsId);

    /**
     * 添加商品到banner
     *
     * @param goodsId goodsId
     * @return return
     */
    AjaxResult removeBanner(Long goodsId);

    /**
     * 初始化banner
     */
    void initBanner();
}
